module pwm(
           input clk,
           input reset_n,
           output out
       );
// 可调占空比本质上就是计数+译码，计数器从0计到period-1，是pwm的整个周期。
// 译码器实现：在计数值小于pulse_width的时输出高电平，否则输出低电平。
// 从而实现可调节的占空比。
parameter en = 1;
parameter [31: 0] period = 33333;      //pwm频率设置： = period = 本地时钟频率 / 期望pwm频率
//例如：50Mhz / 1.5k = 33333.33
parameter [31: 0] pulse_width = 15000; //pwm占空比设置  %(pulse_width/period)
reg [31: 0] cnt;
reg wave;

always @(posedge clk or negedge reset_n)
	begin
		if (!reset_n)
			cnt <= 0;
		else if (cnt < period - 1 && en)
			cnt <= cnt + 1;
		else
			cnt <= 0;
	end

always @(posedge clk or negedge reset_n)
	begin
		if (!reset_n)
			wave <= 0;
		else if (cnt < pulse_width && en)
			wave <= 1;
		else
			wave <= 0;
	end

assign out = wave;

endmodule
